home *** CD-ROM | disk | FTP | other *** search
- 3dtools v0.95 released 12-14-94
-
- C++ 3d engine
- by Voltaire/OTM
- all source Copyright (C) 1994 Zach Mortensen
-
- email -
- mortens1@nersc.gov
-
- CONTENTS -
-
- 3DTOOLS.NFO - This file
- OTM-94.NFO - How to contact OTM
-
- OTMPOLY.DOC - Text description of poly filling techniques
-
- MODE13H.ASM - Video library and graphics primitives
- MODE13H.H - Header file for MODE13H.ASM
-
- 3DTOOLS.CPP - 3d engine
- 3DTOOLS.H - Header file for 3DTOOLS.CPP
- SIN.CPP - Integer sin/cos functions
- SIN.H - Header file for the same
-
- DOS4GW.EXE - DOS extender
- SHOWASC.EXE - Demo application (needs DOS4GW.EXE to run)
- SHOWASC.CPP - Source for the above
- *.ASC - 3dStudio .ASC files for use with SHOWASC
-
-
- HISTORY -
-
- This code is 100% original. Nothing has been ripped, stolen,
- borrowed, or in any way taken from anyone else. Maybe that
- is why it has taken me so long to get 3dtools to the point
- where it is releasable; and maybe that is the reason why
- there is still so much to be done here. I started from
- scratch around 6 months ago, daydreaming of 3d math in my
- calculus class (later on I realized I should've been paying
- more attention...heheh). I have worked on this code in my spare
- time for the past 4 months or so; and now here I am with, well,
- SOMETHING to show for all my work.
-
- If you have read this far, you are to be congratulated. Most coders
- I know would stop after getting to the "C++" part on the third line.
- If you are DYING to know, object oriented design is the best thing
- that ever happened to coding. The fact that you don't have to
- "re-invent the wheel every time you want to drive your car" is
- significant. You see, with object oriented design (yes, modular
- code is the most simple form of it), you spend some time developing
- tools, and then you can use them effortlessly if you have designed
- them well. This allows you to spend time writing new code instead
- of rewriting what you have already written...it just makes sense.
-
-
- A BIT OF PHILOSOPHY -
-
- So I'm in a philosophical mood right now...big deal. I have noticed
- a big change in the demo scene over the past two years. In late 1992
- to early 1993, the scene was dominated by a few groups, most of which
- simply knew how to do things that no one else did in terms of coding.
- Vectors, voxels, texture mapping, quality music code, fractals,
- gouraud shading...all these things were a big deal back then because
- very few individuals knew how they were done. As time has passed and
- knowledge has spread, groups are popping up all over the place that
- have a lot of knowledge available to them. Since all of the
- afforementioned coding secrets have been made available, these newer
- groups are able to compete on a level which was unattainable just two
- years ago. So, seeing as how we all know how to code just about
- everything now, what is going to separate the good groups from the
- mediocre ones in the future?
-
- The answer is simple: creativity. We all know the same tricks now,
- but not all of us have the ability to apply our knowledge in a
- creative way. This should be somewhat of a wake up call to all the
- groups out there who have been very succesful in the past - the
- tables are about to turn. New groups that simply could not have kept
- up in the past now know all you know about coding. The novelty of
- your code alone will not be able to carry you through the next few
- years because there IS no novel code any more. These newer groups,
- because of the greater creativity they posess, are going to pull
- quite a coup in the next few years.
-
- So what interest do I have in all of this? Well, I'm a demo
- enthusiast. I really enjoy seeing quailty productions, original
- productions. Honestly, I have seen only a few in the past
- year that really qualify as original. Verses by EMF is the best
- example that comes to mind. When we saw the infamous Bill Gates
- morpher, we all said "WOW, that was funny...hmmm, I know how to
- texture map, I know how to interpolate points...WHY DIDN'T I THINK
- OF THAT?" The answer once again is simple: creativity.
-
- I guess my deepest desire is to see more productions like Verses, to
- sit back and really enjoy one instead of saying "I've seen that 16
- times before..." I believe this can best be accomplished by putting
- the best possible tools in the hands of as many people as we can;
- because the more people there are that have these tools, the better
- the chance that one of them will do something really spectacular with
- them that has never been done before.
-
- So here is my appeal - to everyone out there who is NOT part of a
- big name demo group, to everyone out there who HASN'T ever won
- anything at a compo, let's spread as much code around as we can.
- Only by allowing everyone to start on equal ground will we see who
- REALLY ARE the best, the most creative groups.
-
-
- REVISION NOTES -
-
- This newest version incoporates z-buffering, which is by far the
- biggest change from v0.90. Consequently, all of the z-buffered
- drawing routines are the most highly optimized in this version. I
- am aware of the fact that there are optimizations present in the
- z-buffered routines which are absent from the regular drawing
- routines, but I really don't care at this point. I am planning on
- going back over the old routines and bringing them up to snuff, but
- I was in a tremendous rush to get this version released as soon as
- possible.
-
- Matrix rotation was implemented; thanks to ShadowH for providing me
- with matrix equations that actually WORK! The point3d::matRotate()
- function requires 9 multiplies and 3 shifts, compared with 12
- multiplies and 3 shifts found in the point3d::localRotate() function.
- The speed increase is especially noticable when rotating large
- gouraud shaded objects, in which case every rotation processes
- 2 * numPoints + numPolys vectors.
-
- There are a lot of other noticable optimizations. Foremost is the
- fact that a dot product is no longer calcualted to eliminate planes,
- due to the fact that I finally sat down and thought about all the
- math I have been using for such a long time.
-
- initSinCos() is called when the world object is initialized at
- run time, so calling it explicitly at the start of the program is
- superfluous.
-
- SHOWASC now accepts two parameters, shading and distance. Type
- SHOWASC with no arguments to get this info -
-
- USAGE:
-
- showasc <filename.asc> <shading> <distance>
-
- shading: 0 = none; 1 = Lambert; 2 = Gouraud
- distance: the greater the distance, the smaller the object will be
-
- e.g.
- showasc duck.asc 2 20000
-
- Running showasc <filename.asc> with no parameters will default to
- gouraud shading at a distance of 4096.
-
- e.g.
- showasc b1.asc
-
-
- REVISION HISTORY -
-
- 11-01-94 F∙I∙R∙S∙T R∙E∙L∙E∙A∙S∙E Version 0.90ß
-
- 12-13-94 Version 0.95
-
- Bugfixes - NONE <whew!>
-
- New features - z-buffering, matrix rotation,
- all around optimization (too much to list).
-
-
- GREETS -
-
-
- Siri - THREE words...I LOVE YOU!
- Hurricane/OTM - two words...PK!
- Zilym Limms/OTM - one word...PMODE ;)
- Nameshift/OTM - thanks for drawing the alphabet .ASCs
- Stalker/OTM - for starting the BORK pandemic...w3 r00l
- Supreme/OTM - I want your new computer!
- Tek/OTM - Horizon footbal rules :P
- Alex Chalfin/OTM - uhhh...handle? ;)
- Patrick Aalto - thanks for all the hints
- Arnold, Hans, Lothar - here's to 126 US gallons of inside jokes
- SiL - for giving me the z-buffering idea
- Tulip - thanks for duck.asc, I want one of Sonic! ;)
- MainFrame - we'll get all this 3d stuff right someday ;)
- DarkShade - for teaching me how to bit sort
- Jailcoder - for giving me something to shoot for...:)
- Tran and DareDevil - for PMODE/W
- doom - ALRIGHT! I RELEASED IT ALREADY! ;)
- rbeer - insomniacs-R-us ;)
- Juggler/XTC - Voxel advice
- ShadowH - thanks for the matrix equations
- Moomin and Zep - Hang in there...you guys will get it
- StarScream
- bri_acid
- Houmi
- GodHead
- BEan_dIP
- Codex Hammer
- PhulAdder
- Bone_
- Opium
-